/**
 * 
 */
package com.netscenery.yang.designer;

import java.util.ArrayList;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;

/**
 * @author llly
 *
 */
public class ModulesLoad {
	private ArrayList<ModuleLoad> modules;
	
	public ModuleLoad getModule(String moduleName){
		if (null == modules){
			return null;
		}
		
		int size = modules.size();
		for (int i = 0; i < size; i++){
			ModuleLoad moduleLoad= modules.get(i);
			if (null == moduleLoad){
				continue;
			}
			if (moduleLoad.getName().equals(moduleName)){
				return moduleLoad;
			}
		}
		
		return null;
	}
	
	public ModuleLoad getModule(String moduleName,String revisionDate){
		if (null == modules){
			return null;
		}
		
		int size = modules.size();
		for (int i = 0; i < size; i++){
			ModuleLoad moduleLoad= modules.get(i);
			if (null == moduleLoad){
				continue;
			}
			if (moduleLoad.getName().equals(moduleName)
					&& moduleLoad.getRevisionDate().equals(revisionDate)){
				return moduleLoad;
			}
		}
		
		return null;
	}
	
	public ModuleLoad getModule(int index){
		if (null == modules){
			return null;
		}
		
		return modules.get(index);
	}
	
	
	public ModuleLoad getModuleByFilename(String path,String filename){
		if (null == modules){
			return null;
		}
		
		int size = modules.size();
		for (int i = 0; i < size; i++){
			ModuleLoad moduleLoad= modules.get(i);
			if (null == moduleLoad){
				continue;
			}
			if (moduleLoad.getPath().equals(path)
					&& moduleLoad.getFileName().equals(filename)){
				return moduleLoad;
			}
		}
		
		return null;
	}
	
	public boolean addModule(ModuleLoad module){
		if (null == module){
			return false;
		}
		
		if (null != getModule(module.getName())){
			return false;
		}
		
		if (null == modules){
			modules = new ArrayList<ModuleLoad>();
		}
		
		return modules.add(module);
	}
	
	public ModuleLoad removeModule(String moduleName){
		if (null == modules){
			return null;
		}
		
		int size = modules.size();
		for (int i = 0; i < size; i++){
			ModuleLoad moduleLoad= modules.get(i);
			if (null == moduleLoad){
				continue;
			}
			if (moduleLoad.getName().equals(moduleName)){
				return modules.remove(i);
			}
		}
		
		return null;
	}
	
	public ModuleLoad removeModule(int index){
		if (null == modules){
			return null;
		}
		
		return modules.remove(index);
	}
	public int getModulesNumber(){
		if (null == modules){
			return 0;
		}
		
		return modules.size();
	}
	public void readXml(Document doc){
		if (null == doc){
			return;
		}
		
		Element root = doc.getRootElement();
		if (null == root){
			return;
		}
		
		if (!root.getName().equals("modules")){
			return;
		}
		
		List<Element> modules= root.getChildren();
		int size = modules.size();
		
		for (int i = 0; i < size; i++){
			Element module = modules.get(i);
			if (null == module){
				continue;
			}
			
			ModuleLoad moduleLoad= new ModuleLoad();
			moduleLoad.readXml(module);
			this.addModule(moduleLoad);
		}
		return;
	}
}
